package rothag.views.homemenu;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.UUID;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import rothag.controller.MainController;
import rothag.graphics.*;

import rothag.views.JButtonBase;
import rothag.views.JPanelBase;

/**
 *
 * @author Gaetan
 */
public class ChargerPartieJPanel extends JPanelBase implements ActionListener, MouseListener {

    private JButtonBase charger;
    private JButtonBase annuler;
    private JTable listePartie;

    public ChargerPartieJPanel(MainController controller) {
        super(controller);

        setBackground(new Color(0, 0, 0, 150));

        hauteur = 3 * GraphicsParameters.mainHeight / 4;
        largeur = GraphicsParameters.mainWidth / 2;

        Font font = GraphicsHelper.getFont(20, "italic");

        JLabel label = new JLabel("Sélection de la partie");
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setFont(font);
        label.setForeground(Color.WHITE);
        label.setBounds(0, 20, largeur, 50);
        add(label);

        font = GraphicsHelper.getFont(15, null);

        charger = new JButtonBase("Charger");
        charger.setFont(font);
        charger.setBounds(largeur - 150, hauteur - 75, 100, 50);
        charger.addActionListener(this);
        add(charger);

        annuler = new JButtonBase("Annuler");
        annuler.setFont(font);
        annuler.setBounds(largeur - 270, hauteur - 75, 100, 50);
        annuler.addActionListener(this);
        add(annuler);

        int hauteurListe = hauteur - 200;
        int largeurListe = largeur - 100;
        listePartie = new JTable();
        listePartie.addMouseListener(this);
        listePartie.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        listePartie.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        JScrollPane scrollPane = new JScrollPane(listePartie);
        GraphicsHelper.setCursorHand(scrollPane);
        scrollPane.setBounds((largeur - largeurListe) / 2, (hauteur - hauteurListe) / 2, largeurListe, hauteurListe);
        add(scrollPane);
    }

    public void reset() {
        try {
            ChargerPartieTableModel tableModel = new ChargerPartieTableModel(controller.getPartiesSauvees());

            listePartie.setModel(tableModel);
        } catch (Exception ex) {
            GraphicsHelper.afficherErreur("Erreur", "Erreur lors de la lecture du fichier de sauvegarde. Veuillez supprimer le fichier savegame.rothag et réessayer.", this).setVisible(true);
        }
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == charger) {
            chargerPartie();
        } else if (e.getSource() == annuler) {
            annuler();
        }
    }

    private void chargerPartie() {
        if (listePartie.getSelectedRow() != -1) {
            UUID id = ((ChargerPartieTableModel) listePartie.getModel()).getIdentifiant(listePartie.getSelectedRow());
            try {
                controller.chargerPartie(id);
            } catch (Exception ex) {
                GraphicsHelper.afficherErreur("Erreur", "Erreur lors de la lecture du fichier de sauvegarde. Veuillez supprimer le fichier savegame.rothag et réessayer.", this).setVisible(true);
            }
        }
    }

    private void annuler() {
        setVisible(false);
        if (getParent() instanceof HomeMenuJPanel) {
            ((HomeMenuJPanel) getParent()).menuPrincipal();
        }
    }

    public void mouseClicked(MouseEvent e) {
        if (e.getSource() == listePartie && e.getClickCount() == 2) {
            chargerPartie();
        }
    }

    public void mousePressed(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }
}
